package org.yelongframework.yaml;

import java.util.Map;

/**
 * yaml映射，属性支持通过“.”分割来获取值
 * 
 * @since 1.0.0
 */
public interface YamlMap extends Map<String, Object> {

	/**
	 * @param key 属性key
	 * @return 获取属性值。如果这个属性不存在则返回 <code>null</code> 。否则返回这个对象的toString()方法的结果
	 */
	String getString(String key);

	/**
	 * @param key 属性key
	 * @return 获取属性值。如果这个属性不存在则返回 <code>null</code>
	 */
	Object getObject(String key);

	/**
	 * @param key 属性key
	 * @return 获取属性对应的映射对象。如spring，将获取spring节点下的map对象。如果没有这个属性或者这个属性不是一个map类型的值均返回
	 *         <code>null</code>
	 */
	Map<String, Object> getMap(String key);

	/**
	 * @param key 属性key
	 * @return 获取属性对应的映射对象的YamlMap的包装对象。如spring，将获取spring节点下的map对象。如果没有这个属性或者这个属性不是一个map类型的值均返回
	 *         <code>null</code>
	 */
	YamlMap getYamlMap(String key);

	/**
	 * 获取属性，将所有的yaml映射转换为一条一条的key：value映射
	 * 
	 * @return 属性映射
	 */
	Map<String, Object> getProperties();

	/**
	 * @return 源映射
	 */
	Map<String, Object> getSourceMap();

}
